package top.stmo;

public class HTTP {

/**
 *      HTTP：超文本传输协议，规定了浏览器和服务器之间数据传输的规则
 *
 *      HTTP 协议特点：
 *          基于TCP协议：面向连接，安全
 *          基于请求-响应模型的：一次请求对应一次响应
 *          HTTP协议是无状态的协议：对于事务处理没有记忆能力。每次请求-响应都是独立的。
 *          缺点：多次请求间不能共享数据。(Java中使用会话技术（Cookie、Session）来解决这个问题)
 *          优点：速度快
 *
 *      请求数据分为3部分：
 *          请求行：请求数据的第一行。其中GET表示请求方式，/表示请求资源路径，HTTP/1.1表示协议版本
 *          请求头：第二行开始，格式为key：value形式。
 *          请求体： POST请求的最后一部分，存放请求参数
 *
 *      GET请求和 POST请求区别：
 *          GET请求请求参数在请求行中，没有请求体。POST请求请求参数在请求体中
 *          GET请求请求参数大小有限制，POST没有
 *
 *      响应数据分为3部分：
 *          响应行：响应数据的第一行。其中HTTP/1.1表示协议版本，200表示响应状态码，OK表示状态码描述
 *          响应头：第二行开始，格式为key：value形式
 *          响应体： 最后一部分。存放响应数据
 *
 *      常见的HTTP 响应头：
 *          Content-Type：表示该响应内容的类型，例如text/html，image/jpeg；
 *          Content-Length：表示该响应内容的长度（字节数）；
 *          Content-Encoding：表示该响应压缩算法，例如gzip；
 *          Cache-Control：指示客户端应如何缓存，例如max-age=300表示可以最多缓存300秒
 *
 *  1xx   响应中——临时状态码，表示请求已经接受，告诉客户端应该继续请求或者如果它已经完成则忽略它
 *  2xx   成功——表示请求已经被成功接收，处理已完成
 *  3xx   重定向——重定向到其它地方：它让客户端再发起一个请求以完成整个处理
 *  4xx   客户端错误——处理发生错误，责任在客户端，如：客户端请求一个不存在的资源，客户端未被授权，禁止访问等
 *  5xx   服务器端错误——处理发生错误，责任在服务端，如：服务端抛出异常，路由出错，HTTP版本不支持等
 *
 *  200    客户端请求成功，即**处理成功，这是我们最想看到的状态码
 *  302    指示所请求的资源已移动到由`Location`响应头给定的 URL，浏览器会自动重新访问到这个页面
 *  304    告诉客户端，你请求的资源至上次取得后，服务端并未更改，你直接用你本地缓存吧。隐式重定向
 *  400    客户端请求有语法错误，不能被服务器所理解
 *  403    服务器收到请求，但是**拒绝提供服务，比如：没有权限访问相关资源
 *  404    请求资源不存在，一般是URL输入有误，或者网站资源被删除了
 *  428    服务器要求有条件的请求，告诉客户端要想访问该资源，必须携带特定的请求头
 *  429    太多请求，可以限制客户端请求某个资源的数量，配合 Retry-After(多长时间后可以请求)响应头一起使用
 *  431    请求头太大，服务器不愿意处理请求，因为它的头部字段太大。请求可以在减少请求头域的大小后重新提交
 *  405    请求方式有误，比如应该用GET请求方式的资源，用了POST
 *  500    服务器发生不可预期的错误。服务器出异常了，赶紧看日志去吧
 *  503    服务器尚未准备好处理请求，服务器刚刚启动，还未初始化好
 *  511    客户端需要进行身份验证才能获得网络访问权限
 *
 */

}
